/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Logica.controladores;

import Logica.cuenta.Cuota;
import Logica.cuenta.DataCuota;
import Logica.usuario.DataUsuario;
import Logica.usuario.Usuario;
import Persistencia.Persistencia;
import Utilidades.Utils;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author maxis
 */
public class ControladorUsuario {
    static ControladorUsuario _instancia = null;
    private static List<Usuario> _listaUser = new ArrayList<>();
    
    public ControladorUsuario(){};
    private Usuario nuevo;
    public static ControladorUsuario getInstance(){
        if(_instancia == null) _instancia = new ControladorUsuario();
        return _instancia;
      }
    public Usuario BuscarUsuario(int codigo){
        for(Usuario usr:_listaUser){
            if(usr.getCodigo() == codigo)
               return usr;
        }
        return null;
    }
    
    public void cargarCuotas(int codigo, List<Cuota> lista){
        Usuario u = BuscarUsuario(codigo);
        for (Cuota c :lista){
            u.agregarCuota(c);
        }
    }
    
    public void cargarUsuarios() throws ClassNotFoundException, SQLException{
        List<DataUsuario> lista = Persistencia.getInstance().getUsuarios();
        for(DataUsuario du: lista){
            _listaUser.add(new Usuario(du));
        }
    }
    
    public boolean cargarDatos(String nom,String apellido, String dir,String ced,String city,String tel,String cel,Calendar fn){
        nuevo = new Usuario(nom,apellido,fn,dir,tel,cel,city,ced,1);
        if (AltaUsurio(nuevo)==false)
            return false;
        return true;
    }
    
    public boolean EliminarUsuario(int codigo){
        try {
            ControladorCuotas cc = ControladorCuotas.getInstance();
            Persistencia p = Persistencia.getInstance();
            Usuario usr = BuscarUsuario(codigo);
            usr.setActivo(0);
            p.eliminarUsuario(usr.getCodigo());
            ControladorUsuario cu = ControladorUsuario.getInstance();
            for(Cuota c: usr.getCuotas()){
                usr.getCuotas().remove(c);
            }
        return true;
        } catch (SQLException | ClassNotFoundException ex) {
            Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
            return false;}
    }
    public List<Cuota> getListaCuotas(Usuario usr){
        List<Cuota> _lista = usr.getCuotas();
        return _lista;
    }
    public boolean AltaUsurio(Usuario u){
        try {
            u.setCodigo(_listaUser.size()+1);
            Persistencia p = Persistencia.getInstance();
            if (u.getFnac()==null){
                u.setFechaNac(Utils.dateCalendar("0000-00-00"));
            }
            DataUsuario du = new DataUsuario(u);
            p.guardarUsuario(du);
            _listaUser.clear();
            ControladorUsuario.getInstance().cargarUsuarios();
            return true;
        } catch (SQLException | ClassNotFoundException ex) {
            Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
    public List<Usuario> getListausr(){
        return _listaUser;
    }
    
    public void eliminarUsuario(String ced){
        
    }
    public boolean modificarUsuario(DataUsuario du) throws SQLException, ClassNotFoundException{
        Persistencia p = Persistencia.getInstance();
        try{
            p.ModificarUsuario(du);
            Usuario u = BuscarUsuario(du.getCodigo());
            u.setNombre(du.getNombre());
            u.setApellido(du.getApellido());
            u.setCedula(du.getCedula());
            u.setTelefono(du.getTel());
            u.setCelular(du.getCel());
            u.setCiudad(du.getCiudad());
            u.setDireccion(du.getDireccion());
            u.setFechaNac(du.getfNac());
            return true;
        }
        catch(Exception e){
            return false;
        }
        
    }
    /*
    public void GuardarCuotaUsr(Usuario u, Cuota c){
    //Usuario usr = this.BuscarUsuario(u.getCodigo());
    u.agregarCuota(c);
   } */
    


}

